home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / cpphtp2 / code.jar / code / ch09 / fig09_10.txt < prev    next >
Text File  |  1998-02-27  |  3KB  |  108 lines

  1. 1   // Fig. 9.10: cylindr2.h
  2. 2   // Definition of class Cylinder
  3. 3   #ifndef CYLINDR2_H
  4. 4   #define CYLINDR2_H
  5. 5   
  6. 6   #include "circle2.h"
  7. 7   
  8. 8   class Cylinder : public Circle {
  9. 9      friend ostream &operator<<( ostream &, const Cylinder & );
  10. 10  
  11. 11  public:
  12. 12     // default constructor
  13. 13     Cylinder( double h = 0.0, double r = 0.0,
  14. 14               int x = 0, int y = 0 );
  15. 15  
  16. 16     void setHeight( double );   // set height
  17. 17     double getHeight() const;   // return height
  18. 18     double area() const;        // calculate and return area
  19. 19     double volume() const;      // calculate and return volume
  20. 20  
  21. 21  protected:
  22. 22     double height;              // height of the Cylinder
  23. 23  };
  24. 24  
  25. 25  #endif
  26. 26  
  27. 27  
  28. 28  // Fig. 9.10: cylindr2.cpp
  29. 29  // Member and friend function definitions 
  30. 30  // for class Cylinder.
  31. 31  #include <iostream.h>
  32. 32  #include <iomanip.h>
  33. 33  #include "cylindr2.h"
  34. 34  
  35. 35  
  36. 36  
  37. 37  // Cylinder constructor calls Circle constructor
  38. 38  Cylinder::Cylinder( double h, double r, int x, int y )
  39. 39     : Circle( r, x, y )   // call base-class constructor
  40. 40  { setHeight( h ); }
  41. 41  
  42. 42  // Set height of Cylinder
  43. 43  void Cylinder::setHeight( double h ) 
  44. 44     { height = ( h >= 0 ? h : 0 ); }
  45. 45  
  46. 46  // Get height of Cylinder
  47. 47  double Cylinder::getHeight() const { return height; }
  48. 48  
  49. 49  // Calculate area of Cylinder (i.e., surface area)
  50. 50  double Cylinder::area() const
  51. 51  {
  52. 52     return 2 * Circle::area() +
  53. 53            2 * 3.14159 * radius * height;
  54. 54  }
  55. 55  
  56. 56  // Calculate volume of Cylinder
  57. 57  double Cylinder::volume() const
  58. 58     { return Circle::area() * height; }
  59. 59  
  60. 60  // Output Cylinder dimensions
  61. 61  ostream &operator<<( ostream &output, const Cylinder &c )
  62. 62  {
  63. 63     output << static_cast< Circle >( c )
  64. 64            << "; Height = " << c.height;
  65. 65  
  66. 66     return output;   // enables cascaded calls
  67. 67  }
  68. 68  
  69. 69  
  70. 70  // Fig. 9.10: fig09_10.cpp
  71. 71  // Driver for class Cylinder
  72. 72  #include <iostream.h>
  73. 73  #include <iomanip.h>
  74. 74  #include "point2.h"
  75. 75  #include "circle2.h"
  76. 76  #include "cylindr2.h"
  77. 77  
  78. 78  int main()
  79. 79  {
  80. 80     // create Cylinder object
  81. 81     Cylinder cyl( 5.7, 2.5, 12, 23 );
  82. 82  
  83. 83     // use get functions to display the Cylinder
  84. 84     cout << "X coordinate is " << cyl.getX()
  85. 85          << "\nY coordinate is " << cyl.getY()
  86. 86          << "\nRadius is " << cyl.getRadius()
  87. 87          << "\nHeight is " << cyl.getHeight() << "\n\n";
  88. 88  
  89. 89     // use set functions to change the Cylinder's attributes
  90. 90     cyl.setHeight( 10 );
  91. 91     cyl.setRadius( 4.25 );
  92. 92     cyl.setPoint( 2, 2 );
  93. 93     cout << "The new location, radius, and height of cyl are:\n"
  94. 94          << cyl << '\n';
  95. 95  
  96. 96     // display the Cylinder as a Point
  97. 97     Point &pRef = cyl;   // pRef "thinks" it is a Point
  98. 98     cout << "\nCylinder printed as a Point is: " 
  99. 99          << pRef << "\n\n";
  100. 100    
  101. 101    // display the Cylinder as a Circle
  102. 102    Circle &circleRef = cyl;  // circleRef thinks it is a Circle
  103. 103    cout << "Cylinder printed as a Circle is:\n" << circleRef
  104. 104         << "\nArea: " << circleRef.area() << endl;
  105. 105 
  106. 106    return 0;
  107. 107 }
  108.